package com.zz.springboot.util;

import com.zz.springboot.constant.TypeConstants;
import com.zz.springboot.initializer.DataInitializer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 号码解析工具类
 */
@Slf4j
public class NumParseUtils {

    /**
     * 解析数字字符串
     *
     * @param str
     * @return
     * @desc 将形如“1,2,3”解析为整数，添加进数组中
     */
    public static List<Integer> splitNumStr(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            str = str.replace(",", " ").                  //支持英文逗号“,”隔开，如“1/20,3/30”
                    replace("，", " ").              //支持中文逗号“，”隔开，如“1/20，3/30”
                    replace(".", " ").               //支持英文句号“.”隔开，如“1/20.3/30”
                    replace("。", " ").               //支持中文句号“。”隔开，如“1/20。3/30”
                    replace("、", " ");
            String[] numArr = str.split("\\s+");
            for (String s : numArr) {
                nums.add(Integer.valueOf(s));
            }
        }
        return nums;
    }

    /**
     * 解析字符串中的生肖对应号码
     *
     * @param str
     */
    public static List<Integer> animalsToNums(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            for (int i = 0; i < str.length(); i++) {
                String s = String.valueOf(str.charAt(i));
                if (TypeConstants.animalConstant.contains(s)) {
                    nums.addAll(DataInitializer.getAnimalMap().get(s));
                }
            }
        }
        return nums;
    }

    /**
     * 解析字符串中的尾数对应号码
     *
     * @param str
     */
    public static List<Integer> digitsToNums(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            for (int i = 0; i < str.length(); i++) {
                String s = String.valueOf(str.charAt(i));
                if (TypeConstants.digitConstant.contains(s)) {
                    nums.addAll(DataInitializer.getDigitsMap().get(s));
                }
            }
        }
        return nums;
    }

    /**
     * 解析字符串中的大小单双对应号码
     *
     * @param str
     */
    public static List<Integer> bigLittleOddsEvensToNums(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            if (str.length() == 2) {
                nums.addAll(DataInitializer.bigLittle_oddsEvens_Map.get(str));
            } else if (str.length() == 1) {
                if (TypeConstants.bigLittleConstant.contains(str)) {
                    nums.addAll(DataInitializer.bigLittle_Map.get(str));
                } else if (TypeConstants.oddEvenConstant.contains(str)) {
                    nums.addAll(DataInitializer.odds_evens_Map.get(str));
                } else {
                    log.error("请输入正确的格式");
                    throw new RuntimeException("请输入正确的格式");
                }
            } else {
                log.error("请输入正确的格式");
                throw new RuntimeException("请输入正确的格式");
            }
        }
        return nums;
    }

    /**
     * 解析字符串中的大小对应号码
     *
     * @param str
     */
    public static List<Integer> bigLittleToNums(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            if (TypeConstants.bigLittleConstant.contains(str)) {
                nums.addAll(DataInitializer.getBigLittleMap().get(str));
            } else {
                log.error("请输入正确的格式");
                throw new RuntimeException("请输入正确的格式");
            }
        }
        return nums;
    }

    /**
     * 解析字符串中的单双对应号码
     *
     * @param str
     */
    public static List<Integer> oddsEvensToNums(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            if (TypeConstants.oddEvenConstant.contains(str)) {
                nums.addAll(DataInitializer.getOddsEvensMap().get(str));
            } else {
                log.error("请输入正确的格式");
                throw new RuntimeException("请输入正确的格式");
            }
        }
        return nums;
    }

    /**
     * 解析字符串中的波色对应号码
     *
     * @param str
     */
    public static List<Integer> colorsToNums(String str) {
        List<Integer> nums = new ArrayList<>();
        if (StringUtils.hasText(str)) {
            for (int i = 0; i < str.length(); i++) {
                String s = String.valueOf(str.charAt(i));
                if (TypeConstants.colorConstant.contains(s)) {
                    nums.addAll(DataInitializer.getClolorsMap().get(s));
                }
            }
        }
        return nums;
    }


}
